//
//  HMTabBar.swift
//  WeiBo
//
//  Created by Apple on 2017/5/30.
//  Copyright © 2017年 KY. All rights reserved.
//

import UIKit

//  定义代理协议(需要继承基协议，否则使用不了weak关键字)
protocol HMTabBarDelegate: NSObjectProtocol {
    //  点击撰写按钮
    func didSelectedComposeButton()
}

//  自定义tabbar
class HMTabBar: UITabBar {

    //  撰写按钮闭包
    var composeButtonCallBack: (()->())?
    //  代理
    weak var hmDelegate: HMTabBarDelegate?
    //  MARK:   --懒加载控件
    private lazy var composeButton: UIButton = {
        let button = UIButton()
        //  添加点击事件
        button.addTarget(self, action: #selector(composeButtonAction), for: .touchUpInside)
        button.setBackgroundImage(UIImage(named: "tabbar_compose_button"), for: .normal)
        button.setBackgroundImage(UIImage(named: "tabbar_compose_button_highlighted"), for: .highlighted)
        //  设置图片
        button.setImage(UIImage(named: "tabbar_compose_icon_add"), for: .normal)
        button.setImage(UIImage(named: "tabbar_compose_icon_add_highlighted"), for: .highlighted)
        //  设置大小与内容大小一样
        button.sizeToFit()
        return button
    }()
    
    override init(frame: CGRect) {
        super.init(frame: frame)
        setupUI()
    }
    
    //  在加载xib或者stroyboard的时候调用该方法
    //  在此表示不支持xib或者sb，会给使用方错误提示
    required init?(coder aDecoder: NSCoder) {
//        fatalError("init(coder:) has not been implemented")
        //  支持xib写法
        super.init(coder: aDecoder)
        setupUI()
    }
    
    //  添加控件设置约束
    private func setupUI() {
        //  设置背景图片
        backgroundImage = UIImage(named: "tabbar_background")
        
        addSubview(composeButton)
    }
    
    //  MARK:   --撰写按钮点击事件
    //  @objc 表示使用oc方式基于运行时，动态想对象发送消息，在swift里面如果方法修饰为私有的在运行循环里面是找不到的。
    @objc private func composeButtonAction() {
        print("哈哈")
        composeButtonCallBack?()
        hmDelegate?.didSelectedComposeButton()
    }
    
    //  调整子控件布局
    override func layoutSubviews() {
        super.layoutSubviews()
        //  设置撰写按钮的中心点
        composeButton.centerX = width * 0.5
        composeButton.centerY = height * 0.5
        //  计算按钮的宽度
        let buttonWidth = width / 5
        var index: Int = 0
        //  遍历系统子控件
        for subView in subviews {
            if subView.isKind(of: NSClassFromString("UITabBarButton")!) {
                //  是我们关心的按钮
                //  设置按钮的观点
                subView.width = buttonWidth
                //  设置x坐标
                subView.x = CGFloat(index) * buttonWidth
                //  记录当前按钮的索引
                index += 1
                //  当前按钮的索引是2让其多加一个按钮的宽度
                if index == 2 {
                    index += 1
                }
            }
        }
        
        
    }

}
